/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jogopoo.Personagem;

import Engine.Fisica.ObjFisico;
import Itens.Explosao;
import Itens.Ogiva;
import Itens.Tiro;
import java.awt.Image;
import java.awt.Point;
import java.util.ArrayList;
import jogopoo.Engine.EngineSom;
import jogopoo.Grafico.GrafCenario;
import jogopoo.Personagem.TipoPersonagens.TPersonagem;

/**
 *
 * @author acer_5542
 */
/**
 * Classe responsavel Pelo Canhao (player) do jogo.
 * @author acer_5542
 */
public class PersNave extends PersonagemAnimado {

    /**
     * Construtor recebe cenario, que eh a fase, Vetor de imagens.
     * seta os atributos conforme o necessario
     * @param cenario
     * @param desenho
     */
    public PersNave(GrafCenario cenario, Image[] desenho) {
        super(cenario, desenho);
        this.velocidade = 0;
        this.direcao = 1;
        this.comandos = new boolean[6];
    }

    /**
     *Faz com que o personagem adquiria uma aceleracao, recebe parametro direcao
     */
    public void acelera(int direcao) {
        if (velocidade < 12) {
            this.velocidade += 3;
        }

        this.direcao = direcao;

    }

    /**
     * Faz o personagem se mover, incrementando a velocidade em x, dando impressao
     * de inercia, e decrementando velocidade dando impressao de atrito.
     */
    public void move() {
        this.posicao.x += this.velocidade * this.direcao;
        if (velocidade > 0) {
            this.velocidade += -1;
        }
        if (delay > 0) {
            delay -= 1;
        }
        if (this.posicao.x >= 896) {
            this.posicao.x = 896;
        }
        if (this.posicao.x <= 0) {
            this.posicao.x = 0;
        }
    }

    /**
     * instancia uma objeto Laser, Adiciona na ArryList lista_laser e seta seus
     * atributos de posicao e indice.
     */
    public void atira(int missel) {
        if (delay == 0) {
            Point p = new Point();
            if(missel == 1){
            lista_tiro.add((Tiro) TipoPersonagens.getInstance(this.cenario,
                    TPersonagem.TIRO));
            }
            if(missel == 2){
            lista_tiro.add((Ogiva) TipoPersonagens.getInstance(this.cenario,
                    TPersonagem.OGIVA));
                    cenario.getJanela().decrementaMNuclear(1);
            }
            int indice = lista_tiro.size() - 1;
            p.x = this.posicao.x + 8 + lista_tiro.get(indice).getOrigemX();
            p.y = this.posicao.y + 6;
            lista_tiro.get(indice).setPosicao(p);
            lista_tiro.get(indice).setIndice(indice);
            EngineSom som = new EngineSom("sons/missel.wav");
            som.play();
            delay = 10;
        }
    }
/**
 * retorna a lista de tiros
 * @return lista_tiros
 */
    public ArrayList<ObjFisico> getListaLaser() {
        return lista_tiro;
    }
/**
 * Seta o comando da nave , comando de teclado
 * @param cmd
 * @param flag
 */
    public void setComando(int cmd, boolean flag) {
        comandos[cmd] = flag;
    }
 /**
  * recebe o Comnado de teclado e executa a funcionalidade necessaria
  *
  */
    public void recebeComandosTeclado() {
        if (comandos[0] == true) {
            acelera(1);
        }
        if (comandos[1] == true) {
            acelera(-1);
        }
        if (comandos[4] == true) {
            atira(1);
        }
        if (comandos[5] == true && cenario.getJanela().getMNuclear() > 0) {
            atira(2);
        }
    }
/**
 * metodo responsavel pela "morte" do objeto
 */
    public void morre(){
        int i = 0;
        cenario.getListaEfeitos().add(new Explosao(cenario, posicao.x+20, posicao.y-20));
        cenario.getListaEfeitos().add(new Explosao(cenario, posicao.x, posicao.y-5));
        cenario.getListaEfeitos().add(new Explosao(cenario, posicao.x+40, posicao.y+5));
        this.posicao.x = 480;
        cenario.getJanela().decrementaVida(cenario);
        
    }

    private float velocidade;
    private int direcao;
    private ArrayList<ObjFisico> lista_tiro = new ArrayList<ObjFisico>();
    private int delay; /// delay dos tiros
    private boolean comandos[];
}
